#ifndef TOOLMOVER_H
#define TOOLMOVER_H

#include <QObject>
#include <QGraphicsEllipseItem>
#include <QTimer>
#include <QPointF>
#include <cmath>
#include <QQueue>
#include <QPair>

class CADView;

class ToolMover : public QObject {
Q_OBJECT

public:
    ToolMover(CADView *cadView, QObject *parent = nullptr);

    ~ToolMover();



//设置轨迹颜色和线宽等其他参数
    QColor ToolColor;//刀具颜色
    QColor CenterPathColor,LeftEdgePathColor,RightEdgePathColor;        // 边框颜色
    int CenterPathWidth,LeftEdgePathWidth,RightEdgePathWidth;           // 边框宽度
//    bool CenterPathFilled,LeftEdgePathFilled,RightEdgePathFilled;         // 是否填充圆弧

    void moveTool_line(const QPointF &start, const QPointF &end, double speed, double R, bool showPath, bool showLiftedgePath=false, bool  showRightedgePath=false);
    void moveTool_arc(const QPointF &start, const QPointF &end, const QPointF &Center, double speed, double R, bool showPath, bool showLiftedgePath, bool showRightedgePath);
    void createTool(const QPointF &center, double radius);
    void deleteTool();
    void deleteCenterpath();
    void deleteLiftpath();
    void deleteRightpath();





private slots:
    void updateToolPosition_Line();
    void updateToolPosition_Arc();



private:
    const double mmToPixel = 5;// 1mm = 5pixels
    CADView *cadView;

    QGraphicsEllipseItem *toolCircle = nullptr;


    QTimer *lineMoveTimer; // 声明直线运动定时器
    QTimer *arcMoveTimer;  // 声明圆弧运动定时器


    double toolSpeed; // 以像素为单位的刀具移动速度
    QPointF pixelSpeed;//每帧移动的像素
    QPointF toolDefaultPosition;//刀具默认位置
    QPointF targetPosition; // 目标位置
    QPointF startPosition; // 起始位置

    QPointF centerPosition;//圆弧的圆心
    QPointF direction;//起点和终点之间的方向向量

    double R;//刀具半径
    //直线的
    double Line_K;//直线的斜率
    double angleInRadians;//直线和X轴正向的夹角，弧度制
    QPointF centerEdgeOffset;//刀心轨迹和刀边轨迹的差值
    QPointF leftcenterEdgeOffset;//
    QPointF RightcenterEdgeOffset;//





    void calculateToolPathDifference();//计算直线刀心轨迹和刀边轨迹的差值

    //圆弧的
    double startAngle;//起始角度
    double endAngle;//结束角度
    double angularSpeed;//角速度
    bool clockwise;//顺时针还时逆时针，true是顺时针
    double currentAngle;//刀具想对圆心的位置角度
    double arcRadius;//刀具轨迹的半径
    double calculateAngle(const QPointF& point, const QPointF& centerpoint);//计算相对角度

    double ArcleftcenterEdgRadius;//左侧轨迹半径
    double ArcRightcenterEdgeRadius;//右侧轨迹半径

    bool showPath; // 是否显示路径
    bool showLiftedgePath;//左边缘路径的显示状态
    bool showRightedgePath;//左边缘路径的显示状态


    //直线运行的轨迹
    QGraphicsLineItem *pathLine = nullptr;
    QGraphicsLineItem *LiftedgePathLine = nullptr; // 左边缘轨迹
    QGraphicsLineItem *RightedgePathLine = nullptr; // 右边缘轨迹

    //圆弧运行的轨迹
    QRectF rect;
    QPainterPath *pathArcPath = nullptr;
    QPainterPath *LiftedgePathArcPath = nullptr;
    QPainterPath *RightedgePathArcPath = nullptr;
    QGraphicsPathItem *pathArc = nullptr;
    QGraphicsPathItem *LiftedgePathArc= nullptr;
    QGraphicsPathItem *RightedgePathArc = nullptr;
    void deletePath(QGraphicsPathItem*& pathArc);
    void deleteLine(QGraphicsLineItem*& line);










};

#endif // TOOLMOVER_H
